#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>

using namespace std;

//vector<int> numMovesStonesII(vector<int>& stones) {
//    int n = stones.size();
//    sort(stones.begin(), stones.end());
//    if (stones.back() - stones[0] + 1 == n)  return { 0,0 };
//    int ma = max(stones[n - 2] - stones[0] + 1, stones[n - 1] - stones[1] + 1) - (n - 1);
//    int mi = n;
//    for (int i = 0, j = 0; i < n && j + 1 < n; i++)
//    {
//        while (j + 1 < n && stones[j + 1] - stones[i] + 1 <= n)
//            j++;
//        if (j - i + 1 == n - 1 && stones[j] - stones[i] + 1 == n - 1)
//            mi = min(mi, 2);
//        else
//            mi = min(mi, n - (j - i + 1));
//    }
//    return { mi,ma };
//}

int missingInteger(vector<int>& nums) {
    unordered_set<int> s;
    for (auto it : nums)
        s.insert(it);
    int n = nums.size();
    int tot = 0;

    for (int i = 0; i < n; i++)
    {
        if (i == 0)  tot = nums[i];
        else if (nums[i] != nums[i - 1] + 1) break;
        else    tot += nums[i];
    }

    for (int i = tot; i <= INT_MAX; i++)
        if (!s.count(i))
            return i;
    return -1;
}

vector<int> get(int n)
{
    vector<int> v;
    while (n)
    {
        v.push_back(n & 1);
        n >>= 1;
    }
    return v;
}
int minOperations(vector<int>& nums, int k) {
    int t = 0;
    for (auto it : nums)
        t ^= it;
    if (t == k)  return 0;
    vector<int> v1 = get(t);
    vector<int> v2 = get(k);
    int n = max(v1.size(), v2.size());
    v1.resize(n);
    v2.resize(n);
    int res = 0;
    for (int i = 0; i < n; i++)
    {
        if (v1[i] != v2[i])
            res++;
    }
    return res;
}

int main()
{
	return 0;
}